/** 
 * SymbolTable.java
 * @author Lex
 * 2007-8-24 ����03:29:15
 */
package fun.symtable;

import fun.parser.ast.node.base.Expression;

/**
 * �����ű�Ľӿ�
 */
public interface SymbolTable {
	public String getName();

	public VariableIterator variables();

	public FunctionIterator functions();

	public SymbolTable getParent();

	public void setParent(SymbolTable parent);

	/**
	 * �������[name]�������޸����ֵ�� ���粻���ڣ����ֵΪvalue�ı���name
	 * 
	 * @param name
	 *            ������
	 * @param value
	 *            ֵ
	 * @return ��������ڣ�ע��������Ա�֤���صĲ���null
	 */
	public VariableEntry setVariable(String name, double value);

	/**
	 * @param name
	 *            ��Ҫ���ҵı���������
	 * @return ��ű���������������; ����null�������ű��в������������
	 */
	public VariableEntry getVariable(String name);

	/**
	 * @return �������ڣ����ﱣ֤����ֵ����null
	 */
	public FunctionEntry setFunction(String name, String[] parameters, Expression expr);

	/**
	 * ���ط�ű���ָ����������
	 * 
	 * @param name
	 * @param argn
	 * @return �������ڣ�����null���纯���ٷ�ű���
	 */
	public FunctionEntry getFunction(String name, int argn);
}
